package com.example.log_db.annotation;

import java.lang.annotation.*;

/**
 * 支持SpEL表达式的日志记录注解，用于复杂场景下记录日志
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SpELLogRecord {
    
    /**
     * 操作类型
     */
    String operationType() default "";
    
    /**
     * 操作描述，支持SpEL表达式
     * 例如：'用户' + #user.username + '执行了' + #operation
     */
    String description() default "";
    
    /**
     * 操作人ID，支持SpEL表达式
     * 例如：#user.id
     */
    String operator() default "";
    
    /**
     * 业务ID，支持SpEL表达式
     * 例如：#order.id
     */
    String businessId() default "";
    
    /**
     * 业务类型
     */
    String businessType() default "";
    
    /**
     * 额外信息，支持SpEL表达式
     * 例如：#result.success ? '成功' : '失败'
     */
    String extra() default "";
    
    /**
     * 是否记录请求参数
     */
    boolean recordParams() default true;
    
    /**
     * 是否记录返回结果
     */
    boolean recordResult() default true;
    
    /**
     * 是否在执行方法前解析SpEL表达式
     * 如果为true，则在方法执行前解析表达式，此时无法获取返回值
     * 如果为false，则在方法执行后解析表达式，可以获取返回值
     */
    boolean parseBeforeExecution() default false;
}